<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/model/Service/Service.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/model/DAO/DAOMAnager.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Process.php';

/**
 * Класс, отвечающий за работу с процессами
 */
class ProcessService extends Service {
	protected $postDAO;
	protected $indicDAO;
	public function __construct($daoManager){
		parent::__construct($daoManager);
		parent::createDAO("ProcessDAO");
		$this->postDAO = $this->daoManager->createDAO("PostDAO");
		$this->indicDAO = $this->daoManager->createDAO("IndicatorDAO");
	}
	/**
	 * Сохранить процесс
	 * @param Process $process Сохраняемый процесс
	 */
	public function save($process){
		if($process->getIdentity() == null){
			return $this->dao->create($process);
		}else{
			return $this->dao->update($process);
		}
	}
	
	/**
	 * Прочитать процесс
	 * @param int $identity Идентефикатор процесса
	 */
	public function read($identity){
		$proc =$this->dao->read($identity);
		$proc->setOwner($this->postDAO->read($proc->getOwner()->getIdentity())); 
		$this->indicDAO->getIndicatorsForProcess($proc);
		return $proc;
	}
	/**
	 * Удалить Процесс
	 * @param int $identity Идентефикаор удаляемого процесса
	 */
	public function  delete($identity){
		return $this->dao->delete($identity);
	}
	
	/**
	 * Получить список процессов
	 */
	public function getAll(){
		$procs = $this->dao->getAll();
		foreach ($procs as $proc){
			$proc->setOwner($this->postDAO->read($proc->getOwner()->getIdentity()));
			$this->indicDAO->getIndicatorsForProcess($proc);
		}
		return $procs;
	}
	
	/**
	 * Список всех процессов без связанных с ними показателях процессов
	 * @param int $identity Идентефикатор показателя процесса
	 */
	public function readProcess($identity){
		$procs =  $this->dao->readProcess($identity);
		foreach ($procs as $proc){
			$proc->setOwner($this->postDAO->read($proc->getOwner()->getIdentity()));
			$this->indicDAO->getIndicatorsForProcess($proc);
		}
		return $procs;
	}
}
?>